#include<stdio.h>
#include<stdlib.h>
#include<string.h>

#define MAX 100
//数据元素（数据节点）
typedef char ElemType;	//数据元素中数据的类型
typedef struct node
{
	ElemType data[100];		
	struct node *next;		
}strnode;
//定义每行的头结点
typedef struct head
{
	int numberLine;	//字符串的行号
	int lengthLine;	//字符串的长度
	strnode*next;
}headnode; 
headnode Head[MAX];//100行


//头结点初始化
void Init()
{
	int i;
	for(i=0;i<MAX;i++)
	{
		Head[i].lengthLine=0;
	}
}
void Input()
{
	strnode *pnew;
	int i,j,LineNumber;
	ElemType ch;
	while(1)
	{
		j=-1;
		printf("请输入字符串所在的行号(0~MAX),MAX+1->Exit\n");
		scanf("%d",&LineNumber);
		if(LineNumber<0||LineNumber>=MAX)
			return;
		printf("请输入字符串(#结束):\n");
		i=LineNumber;
		Head[i].numberLine=LineNumber;
		Head[i].next=(strnode*)malloc(sizeof(strnode));//分配数据节点空间
		pnew=Head[i].next;
		ch=getchar();
		while(ch!='#')
		{
			j++;
			if(j>=50)//字符串超过50需再分配一个节点空间
			{
				pnew->next=(strnode*)malloc(sizeof(strnode));
				pnew=pnew->next;
			}
			pnew->data[j%50]=ch;
			ch=getchar();
		}
		Head[i].lengthLine=j+1;
	}
}

void List()
{
	strnode *p;
	int i,j,m,n;
	for(i=0;i<MAX;i++)
	{
		if(Head[i].lengthLine>0)
		{
			printf("line:%d\n",Head[i].numberLine);
			n=Head[i].lengthLine;
			m=1;
			p=Head[i].next;
			for(j=0;j<n;j++)
			{
				if(j>=50*m)
				{
					p=p->next;
					m++;
				}
				else
				{
					printf("%c",p->data[j%50]);
				}
				printf("\n");
			}
			
		}
		
	}
	printf("\n");
}

int main()
{
	int sel;
	Init();
	while(1)
	{
		printf("1.Input\n");
		printf("2.Delete\n");	
		printf("3.List\n");	
		printf("4.Exit\n");
		printf("Please choose<1,2,3,4>:");
		scanf("%d",&sel);
		switch(sel)
		{
			case 1:
				Input();break;
			case 2:

				break;
			case 3:
				List(); break;
			case 4:
				exit(0);
				break;
		}
	};
	

	return 0;
}



